package main.leetcode.primary.from101to200;

import main.datastruc.TreeNode;

import java.util.LinkedList;
import java.util.List;

/**
 * 113. 路径总和 II
 *
 * <p>给定一个二叉树和一个目标和，找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
 *
 * <p>说明: 叶子节点是指没有子节点的节点。
 */
public class ex113 {
    private List<List<Integer>> res = new LinkedList<>();
    private List<Integer> list = new LinkedList<>();

    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        if (root == null) {
            return res;
        }
        sum -= root.val;
        list.add(root.val);
        if (sum == 0 && root.left == null && root.right == null) {
            res.add(new LinkedList<>(list));
        } else {
            pathSum(root.left, sum);
            pathSum(root.right, sum);
        }
        list.remove(list.size() - 1);
        return res;
    }
}
